import axios from 'axios'
import { Message, MessageBox } from 'element-ui'
import store from '@/store'
// import { getToken } from '@/utils/auth'
import qs from 'qs'

// create an axios instance
const service = axios.create({
  // baseURL: 'http://192.168.8.130:8080/ECP-OPEN/', // api 的 base_url
  // baseURL: 'https://oaapi.navrise.com/ECP-OPEN/', // api 的 base_url
  baseURL: process.env.BASE_API, // api 的 base_url
  timeout: 60 * 1000, // request timeout
  withCredentials: true
})
// request interceptor
service.interceptors.request.use(
  config => {
    // if (Cookies.get('token') !== undefined) {
    //     config.headers['Authorization'] = 'Token ' + Cookies.get('token');
    // }
    // // 这里我想在Cookies中得到 `csrftoken`，但是会直接跳过，得不到
    // if (Cookies.get('csrftoken') !== undefined) {
    //
    //     config.headers['x-csrftoken'] = Cookies.get('csrftoken');  // 'CSRFToken'
    // }
    // console.log(config.baseURL,config);
    config.data = qs.stringify(config.data)
    config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
    // config.Cookie = document.cookie;

    // Do something before request is sent
    // if (store.getters.token) {
    //   // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
    //   config.headers['X-Token'] = getToken()
    // }
    return config
  },
  error => {
    // Do something with request error
    console.log(error) // for debug
    // Promise.reject(error)
  }
)

// response interceptor
service.interceptors.response.use(
  /**
   * 下面的注释为通过在response里，自定义code来标示请求状态
   * 当code返回如下情况则说明权限有问题，登出并返回到登录页
   * 如想通过 xmlhttprequest 来状态码标识 逻辑可写在下面error中
   * 以下代码均为样例，请结合自生需求加以修改，若不需要，则可删除
   */
  response => {
    const res = response.data
    // console.log(response,res);
    if (res.status !== 200) {
      if (res.status === 300) {
        new Promise((resolve, reject) => {
          Message({
            message: res.msg || '请求失败',
            type: 'error',
            duration: 5 * 1000
          })
          let timer = null
          store.dispatch('LogOut').then(() => {
            clearTimeout(timer)
            timer = setTimeout(() => {
              location.reload()// In order to re-instantiate the vue-router object to avoid bugs
            }, 1000)
          })

          resolve()
        }).then(_ => {

        })
      } else {
        Message({
          message: res.msg || '请求失败',
          type: 'error',
          duration: 5 * 1000
        })

        // console.log(response.status);

        // 50008:非法的token; 50012:其他客户端登录了;  50014:Token 过期了;
        if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
          // 请自行在引入 MessageBox
          // import { Message, MessageBox } from 'element-ui'
          MessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {
            confirmButtonText: '重新登录',
            cancelButtonText: '取消',
            type: 'warning'
          }).then(() => {
            store.dispatch('LogOut').then(() => {
              location.reload() // 为了重新实例化vue-router对象 避免bug
            })
          })
        }
      }
      return Promise.reject('error')
    } else {
      // console.log(response);
      return Promise.resolve(res)
    }
  },
  error => {
    console.log(error)
    console.log('err', error) // for debug
    if (error.data) {
      Message({
        message: error.data.msg,
        type: 'error',
        duration: 5 * 1000
      })
    }

    return Promise.reject(error)
  }
)

export default service

export function $get(url, params) {
  // const domain = 'http://116.62.241.185:8080/ECP-OPEN/'
  return new Promise((resolve, reject) => {
    service.get(url, {
      params: params
    })
      .then(response => {
        resolve(response)
      })
      .catch(err => {
        reject(err)
      })
  })
}

